../src/siri/db/servers.c \
../src/siri/db/shard.c \
../src/siri/db/shards.c \
+../src/siri/db/tasks.c \
../src/siri/db/time.c \
../src/siri/db/user.c \
../src/siri/db/users.c \
./src/siri/db/servers.o \
./src/siri/db/shard.o \
./src/siri/db/shards.o \
+./src/siri/db/tasks.o \
./src/siri/db/time.o \
./src/siri/db/user.o \
./src/siri/db/users.o \
./src/siri/db/servers.d \
./src/siri/db/shard.d \
./src/siri/db/shards.d \
+./src/siri/db/tasks.d \
./src/siri/db/time.d \
./src/siri/db/user.d \
./src/siri/db/users.d \
../src/siri/db/servers.c \
../src/siri/db/shard.c \
../src/siri/db/shards.c \
+../src/siri/db/tasks.c \
../src/siri/db/time.c \
../src/siri/db/user.c \
../src/siri/db/users.c \
./src/siri/db/servers.o \
./src/siri/db/shard.o \
./src/siri/db/shards.o \
+./src/siri/db/tasks.o \
./src/siri/db/time.o \
./src/siri/db/user.o \
./src/siri/db/users.o \
./src/siri/db/servers.d \
./src/siri/db/shard.d \
./src/siri/db/shards.d \
+./src/siri/db/tasks.d \
./src/siri/db/time.d \
./src/siri/db/user.d \
./src/siri/db/users.d \
#include <siri/db/replicate.h>
#include <siri/db/reindex.h>
#include <siri/db/groups.h>
+#include <siri/db/tasks.h>
#define SIRIDB_MAX_SIZE_ERR_MSG 1024
#define SIRIDB_MAX_DBNAME_LEN 256 // 255 + NULL
iso8601_tz_t tz;
size_t buffer_size;
size_t buffer_len;
- time_t start_ts; // in seconds, to calculate up-time.
+ struct timespec start_time; // to calculate up-time.
uint64_t duration_num; // number duration in s, ms, us or ns
uint64_t duration_log; // log duration in s, ms, us or ns
char * dbname;
double idle_time;
} siridb_tasks_t;
-
-void siridb_tasks_init(siridb_tasks_t *tasks);
+void siridb_tasks_init(siridb_tasks_t * tasks);
#define siridb_tasks_inc(tasks) \
-if (!tasks.active++) tasks.idle_time += timeit_stop(&tasks._timeit)
+if (!tasks.active++) tasks.idle_time += timeit_get(&tasks._timeit)
#define siridb_tasks_dec(tasks) \
if (!--tasks.active) timeit_start(&tasks._timeit)
#include <time.h>
-double timeit_stop(struct timespec * start);
+double timeit_get(struct timespec * start);
#define timeit_start(start) clock_gettime(CLOCK_MONOTONIC, start)
#include <uuid/uuid.h>
#include <xpath/xpath.h>
#include <slist/slist.h>
+#include <timeit/timeit.h>
/*
* database.dat
*/
int32_t siridb_get_uptime(siridb_t * siridb)
{
- return (int32_t) (time(NULL) - siridb->start_ts);
+ return (int32_t) timeit_get(&siridb->start_time);
}
/*
int8_t siridb_get_idle_percentage(siridb_t * siridb)
{
double uptime = (double) siridb_get_uptime(siridb);
- return (int8_t) round(siridb->tasks.idle_time / uptime * 100.0f);
+ return (uptime)
+ ? (int8_t) round(siridb->tasks.idle_time / uptime * 100.0f)
+ : 0;
}
}
}
- siridb->start_ts = time(NULL);
+ timeit_start(&siridb->start_time);
uv_mutex_lock(&siri.siridb_mutex);
(int64_t) wserver->siridb->tasks.active,
cond->int64);
+ case CLERI_GID_K_IDLE_PERCENTAGE:
+ return cexpr_int_cmp(
+ cond->operator,
+ (int64_t) siridb_get_idle_percentage(wserver->siridb),
+ cond->int64);
+
+ case CLERI_GID_K_IDLE_TIME:
+ return cexpr_int_cmp(
+ cond->operator,
+ (int64_t) wserver->siridb->tasks.idle_time,
+ cond->int64);
+
case CLERI_GID_K_REINDEX_PROGRESS:
return cexpr_str_cmp(
cond->operator,
* that specific server.
*/
case CLERI_GID_K_ACTIVE_HANDLES:
-#if DEBUG
- assert (siridb->server == server);
-#endif
qp_add_int32(
query->packer,
(int32_t) siri.loop->active_handles);
break;
+ case CLERI_GID_K_ACTIVE_TASKS:
+ qp_add_int32(
+ query->packer,
+ (int32_t) siridb->tasks.active);
+ break;
+ case CLERI_GID_K_IDLE_PERCENTAGE:
+ qp_add_int8(
+ query->packer,
+ siridb_get_idle_percentage(siridb));
+ break;
+ case CLERI_GID_K_IDLE_TIME:
+ qp_add_int32(
+ query->packer,
+ (int32_t) siridb->tasks.idle_time);
+ break;
case CLERI_GID_K_LOG_LEVEL:
qp_add_string(query->packer, Logger.level_name);
break;
case CLERI_GID_K_UPTIME:
qp_add_int32(
query->packer,
- (int32_t) (time(NULL) - siridb->start_ts));
+ siridb_get_uptime(siridb));
break;
}
}
rc += test_strx_to_double();
printf("\nSuccessfully performed %d tests in %.3f milliseconds!\n\n",
- rc, timeit_stop(&start) * 1000);
+ rc, timeit_get(&start) * 1000);
return 0;
}
#include <time.h>
/*
- * Returns time past in seconds
+ * Returns time past in seconds since given start time.
*/
-double timeit_stop(struct timespec * start)
+double timeit_get(struct timespec * start)
{
struct timespec end;
result = await self.client1.query('list servers log_level')
self.assertEqual(result.pop('servers'), [['info'], ['info']])
+ result = await self.client1.query('list servers active_tasks where active_tasks >= 0 and idle_time >= 0 and idle_percentage <= 100')
+ self.assertEqual(result.pop('servers'), [[1], [1]])
+
result = await self.client0.query('alter servers where active_handles > 1 set log_level debug')
result = await self.client1.query('list servers log_level')